package exercise.day05;

/***
 * @author hunter.d
 * @qq 657270652
 * @wx haitao-duan
 * @date 2021/3/6
 **/
public class _01_纠错ErrorCorrect {
    public static void main(String[] args) {

        int a = 15;

        /***
         * 一、判断a是否大于5，如果大于，则： a++，并且打印"a大于5";
         */
        // 错误写法1
        if (a > 5) a++;
        System.out.println("a大于5");

        // 正确写法：
        if (a > 5) {
            a++;
            System.out.println("a大于5");
        }


        /***
         * 二、判断，如果a<20，则循环20-a遍打印 :这是第1遍； 这是第2遍；……
         */
        // 错误写法1 : a放在了引号中，变成了一个无意义的常量字符
        while (a < 20) {
            a++;
            System.out.println("这是第a遍");
        }

        // 错误写法2
        while (a < 20) {
            a++;
            System.out.println("这是第" + "a" + "遍");
        }


        // 错误写法3
        while (a < 20) {
            System.out.println("这是第" + a + "遍");
            a++;
        }


        // 正确写法
        int step = 1;
        while (a < 20) {
            System.out.println("这是第" + step + "遍");
            a++;
            step++;
        }


        /***
         * 三、如果i+1>5,则打印出i，并将j自增1，并打印j自增后的值
         */
        // 错误写法1
        int i = 5;
        int j = 20;
        if (i++ > 5) {  // i++  换成  (i+1)
            System.out.println(i);
            j = j++;   // 直接写成：  j++ 或者 ++j  或者  j = j+1;
            System.out.println(j);
        }


        /***
         * 四、遍历数组，并将数组中的每个元素修改为+1后的值
         */
        // 错误写法1
        int[] arr = {1, 2, 3, 4, 5};
        for (int k = 0; k <= 5; k++) {  // k<=5改成 k<5
            System.out.println(arr[k] + 1);  // 只是打印+1的结果，并没有修改数组的元素
        }

        // 错误写法2
        for (int k = 0; k <= arr.length; k++) {  // 将 <= 改成  <
            System.out.println(arr[k] + 1);
        }


        // 错误写法4
        int w;
        for (w = 0; w < arr.length; w++) {
            arr[w] += 1;
        }
        System.out.println(arr[w]);  // 意义上有错，arr[w]不是整个数组，是一个元素
        // 运行时异常： w到这的时候是5了，超过了最大角标4


        /***
         * 五、遍历数组，求出数组中奇数的个数及偶数的个数
         */
        // 错误写法1
        int oddNum = 0;
        int evenNum = 0;
        int[] arr2 = {1, 2, 3, 4, 5};

        for (int k = 0; k < arr2.length; k++) {
            if (k % 2 == 1) oddNum++;   // k是循环计数器，它不是数组中的元素
            evenNum++;
        }

        // 正确写法
        for (int k = 0; k < arr2.length; k++) {
            if (arr2[k] % 2 == 1) {
                oddNum++;
            }else{
                evenNum++;
            }
        }

        // 更好的实现
        // 只计算奇数个数
        for(int k = 0;k<arr2.length;k++){
            if(arr2[k] % 2 ==1) oddNum++;
        }
        // 偶数的个数=数组总元素个数 - 奇数的个数
        evenNum = arr2.length-oddNum;

    }
}
